
//
//  StatusPictureView.swift
//  sinaweiboFirst
//
//  Created by mac on 16/3/14.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit

private let pictureMargin: CGFloat = 5

private let pictureCellID = "pictureCellID"

class StatusPictureView: UICollectionView {
    
    //重写构造方法
    init() {
        //必须调用指定的构造函数 布局对象必须是流水布局对象
        let layout = UICollectionViewFlowLayout()
        
        super.init(frame: CGRectZero, collectionViewLayout: layout)
        
        //设置最小间距
        layout.minimumInteritemSpacing = pictureMargin
        layout.minimumLineSpacing = pictureMargin
        
        //注册cell可重用的标识
        self.registerClass(pictureCell.self, forCellWithReuseIdentifier: pictureCellID)
        
        //设置数据源
        self.dataSource = self
        
        self.backgroundColor = UIColor.whiteColor()
        
        //点击顶部状态栏 不能够滚动到顶部
        self.scrollsToTop = false
        
        setupUI()
        
    }
    //默认实现报错
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setupUI() {
        addSubview(testLabel)
        testLabel.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.center)
        }
    }
    
    //集合视图显示图片数据源 ＋ 图片的数量
    var imageURLs: [NSURL]? {
        didSet {
            
            //根据图片数量 计算图片的大小
            let pSize = calculatePictureSize()
            //更新约束
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(pSize)
            }
            //设置测试文字
            //            testLabel.text = "\(imageURLs?.count ?? 0)"
            
            reloadData()
        }
    }
    
    //计算图片尺寸
    private func calculatePictureSize() -> CGSize {
        
        let imageCount = imageURLs?.count ?? 0
        //除去左右两边间距最大宽度
        let maxW = ScreenW - 2 * StatusCellMargin
        //图片的宽度 3张图片正好算图片宽度
        let itemW = (maxW - 2 * pictureMargin) / 3
        
        //获取layout对象
        let layout = self.collectionViewLayout as! UICollectionViewFlowLayout
        //设置itemsize
        layout.itemSize = CGSizeMake(itemW,itemW)
        
        if imageCount == 0 {
            
            return CGSizeZero
        }
        if imageCount == 1 {
            //直接给定图片尺寸
            let imageSize = CGSizeMake(150, 100)
            layout.itemSize = imageSize
            return imageSize
        }
        if imageCount == 4 {
            
            let w4 = 2 * itemW + pictureMargin
            return CGSizeMake(w4, w4)
        }
        
        //大于4张 先算出有多少行
        let row = CGFloat((imageCount - 1) / 3 + 1)
        let heights = (row - 1) * pictureMargin + itemW * row
        
        return CGSizeMake(maxW, heights)
        
    }
    
    private var testLabel: UILabel = UIFactory.labelFactory("", textColor: UIColor.yellowColor(), fontSize: 40)
    
}

//数据源协议
extension StatusPictureView: UICollectionViewDataSource {
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageURLs?.count ?? 0
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        //强转成自定义的cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(pictureCellID, forIndexPath: indexPath) as! pictureCell
        //测试颜色
        //        cell.backgroundColor = (indexPath.item % 2 == 0) ? UIColor.redColor() : UIColor.blackColor()
        
        //给cell设置数据
        cell.imageURL = imageURLs![indexPath.item]
        
        return cell
    }
}

class pictureCell: UICollectionViewCell {
    
    var imageURL: NSURL? {
        didSet {
            iconView.sd_setImageWithURL(imageURL)
        }
    }
    
    //重写构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    //默认实现报错
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    //MARK: 设置UI界面
    private func setupUI() {
        addSubview(iconView)
        iconView.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(contentView.snp_edges)
        }
    }
    
    //MARK: 懒加载子视图
    //    private lazy var iconView: UIImageView = UIImageView()
    
    private lazy var iconView: UIImageView = {
        let iv = UIImageView()
        //视图默认显示模式 ScaleToFill 放大或者缩小图片全部部分 进行填充显示 ->如果图片的比例和视图的比例不一致 图片会失真
        //              ScaleAspectFit 放大或者缩小部分 适应显示模式 图片原有比例不变 等比缩小和放大 会导致图片上下左右可能留白
        //              ScaleAspectFill 放大或者缩小局部 进行填充显示 图片原有比例不变 同时上下左右不会留白 视图可能被裁剪
        iv.contentMode = .ScaleAspectFill
        
        //在xib／sb中  imageView是默认设置了裁剪 但是手写代码 需要手动设置裁剪
        
        iv.clipsToBounds = true
        
        return iv
    }()
}
















